<?php
/**
 * 短信抽象类，定义了算法结构明确算法的执行顺序
 * User: 16
 * Date: 2018/9/18
 * Time: 10:44
 */
namespace template;

use Exception;

abstract  class Sms{
    /**
     * 运营商的配置
     * @var array
     */
    protected $config = [];

    protected $_text = "默认的短信模板";

    /**
     * 构造函数，调用运营商们的初始化函数进行初始化
     * @param array $config
     */
    final function __construct($config = []){
        $this->initialize($config);
    }

    /**
     * 运营商实现的构造函数，用来初始化类
     * @desc
     * @param array $config
     * @return mixed
     * @author 16
     * @date 2018/9/18
     */
    abstract function initialize($config=[]);

    /**
     * 生成短信文本
     * @desc    与运营商无关
     * @author 16
     * @date 2018/9/18
     */
    function makeText(){
        $this->_text = rand(00000,99999);
    }

    /**
     * 运营商发送短信的方法
     * @desc
     * @param int $mobile
     * @return mixed
     * @author 16
     * @date 2018/9/18
     */
    abstract function sendSms($mobile=0);

    /**
     * 发送短信
     * @desc    最终调用的方法，明确了实现的算法顺序
     * @param $mobile
     * @author 16
     * @date 2018/9/18
     */
    final function send($mobile){
        $this->makeText();
        $this->sendSms($mobile);
    }
}